Watt's Steam Engine

To move the linkage manually move the BLUE point.  To automate the movement give the Speed slider a non-zero value. If this fails to work (which can happen after clicking the  reset icon) then right-click on the BLUE point and select "Animation on" or alternatively just reload the page.

Frame DImensions

Animation Speed

Frame points

Loci

Watt's 4-Bar Linkage

Pantograph

Construction

BasePoint_1 = Intersect(xAxis, yAxis)
ω_1 = 4.12 (slider from 2 * Δω to 20, step 0.1)
h_1 = 2.31 (slider from Δω to 5, step 0.1)
h_2 = 3.77 (slider from Δω to 5, step 0.1)
D: (0, h_1)
A: (ω_1, h_2)
BasePoint_2: (ω_1, 0)
Δω = 0.17 (slider from 0 to 0.5, step 0.01)
P_1: (-Δω, h_1)
P_2: (-Δω, -Δω)
P_3: (ω_1 + Δω, -Δω)
P_4: (ω_1 + Δω, h_2)
P_5: (ω_1 - Δω, h_2)
P_6: (ω_1 - Δω, Δω)
P_7: (Δω, Δω)
P_8: (Δω, h_1)
C_1: (0, h_1 + Δω)
C_2: (ω_1, h_2 + Δω)
poly1, p_1, p_2, p_3, p_4, p_5, p_6, p_7, p_8 = Polygon(P_1, P_2, P_3, P_4, P_5, P_6, P_7, P_8)
c = CircumcircleArc(P_8, C_1, P_1)
d = CircumcircleArc(P_4, C_2, P_5)
A_2 = (-3.96, -5.76)
D_2 = (-1.3, -5.76)
E_2 = (-1.28, -9.04)
F = (-3.94, -9.04)
a = 1.6 (slider from 0 to 5, step 0.1)
g = Circle(D, a)
k = Circle(A, 3 * a)
Speed = 0 (slider from -10 to 10, step 0.1)
A_1 = (-4.258788652691257, 1.459492698995655)
D_1 = (-0.9799057429504561, 1.4594926989956556)
E_1 = (-0.9829408970878275, -0.27397564539091307)
F_1 = (-4.2618238068286285, -0.2739756453909134)
poly2_1, a_2, d_2, e_1, f_1 = Polygon(A_1, D_1, E_1, F_1)
ω_2 = 2.74 (slider from 2 * Δω to 20, step 0.1)
b_1 = Line(P_2, P_3)
h_3 = Line(P_7, P_6)
i = OrthogonalLine(A, h_3)
G = Intersect(i, h_3)
p = Circle(G, ω_2)
H, I = Intersect(p, h_3)
q = Circle(I, Δω)
m = Line(P_6, G)
M = Intersect(p_3, m)
n = Segment(P_4, M)
j = Segment(M, I)
r_1 = Circle(I, Δω)
J = Intersect(r_1, j)
J' = Mirror(J, I)
s = Semicircle(J, J')
l = Ray(P_2, P_3)
t = OrthogonalLine(J', l)
K = Intersect(t, l)
poly3, p_9, k_1, j', m_1 = Polygon(P_3, K, J', M)
c_1 = Segment(M, J)
o = false
L = Midpoint(P_1, P_2)
N = Midpoint(P_2, L)
g_1 = Ray(N, P_2)
i_1 = Ray(J', K)
h = 2.2 (slider from 0 to 10, step 0.1)
q_1 = Circle(P_2, h)
O, Q = Intersect(q_1, g_1)
j_1 = OrthogonalLine(O, g_1)
P = Intersect(i_1, j_1)
poly4, p_{10}, o_1, p_{11}, k_2 = Polygon(P_2, O, P, K)
r = 1.1 (slider from 0 to 2, step 0.1)
s_1 = Circle(I, r)
R = Point(s_1)
l_1 = Segment(I, R)
d_1 = Circle(A, ω_2)
t_1 = Circle(R, h_2)
S, T = Intersect(t_1, d_1)
n_1 = Segment(R, T)
a_1 = Ray(T, A)
T' = Mirror(T, A)
b_2 = Ray(A, T')
c_2 = Segment(A, T)
e_2 = Circle(A, a)
B = Intersect(e_2, b_2)
f_2 = Circle(D, ω_1 - a)
g_2 = Circle(B, h_2 - h_1)
V, C = Intersect(f_2, g_2)
i_2 = Segment(D, C)
j_2 = Segment(C, B)
l_2 = Segment(B, A)
ratio: Length[l_2] / Length[i_2]
n_2 = Line(C, b_2)
BC = Distance(B, C)
AB = Distance(A, B)
CD = Distance(C, D)
q_2 = Circle(B, (BC * CD) / (AB + CD))
E = Intersect(q_2, j_2)
m_2 = Ray(A, E)
r_2 = Line(C, l_2)
U = Intersect(r_2, m_2)
s_2 = Line(U, j_2)
t_2 = Line(B, r_2)
W = Intersect(t_2, s_2)
a_3 = Segment(W, B)
b_3 = Segment(W, U)
c_3 = Segment(U, C)
loc1 = Locus(E, R)
loc2 = Locus(U, R)
d_3 = Circle(I, h_2 - 1.5 * r)
e_3 = Ray(I, R)
Z = Intersect(d_3, e_3)
f_3 = Segment(I, Z)
I' = Rotate(I, 15*°, I)
Z' = Rotate(Z, 15*°, I)
g_3 = Segment(I', Z')
I'' = Rotate(I', 15*°, I)
Z'' = Rotate(Z', 15*°, I)
i_3 = Segment(I'', Z'')
I''' = Rotate(I'', 15*°, I)
Z''' = Rotate(Z'', 15*°, I)
j_3 = Segment(I''', Z''')
B_1 = Rotate(I''', 15*°, I)
G_1 = Rotate(Z''', 15*°, I)
k_3 = Segment(B_1, G_1)
H_1 = Rotate(B_1, 15*°, I)
I_1 = Rotate(G_1, 15*°, I)
l_3 = Segment(H_1, I_1)
J_1 = Rotate(H_1, 15*°, I)
K_1 = Rotate(I_1, 15*°, I)
m_3 = Segment(J_1, K_1)
L_1 = Rotate(J_1, 15*°, I)
M_1 = Rotate(K_1, 15*°, I)
n_3 = Segment(L_1, M_1)
N_1 = Rotate(L_1, 15*°, I)
O_1 = Rotate(M_1, 15*°, I)
q_3 = Segment(N_1, O_1)
Q_1 = Rotate(N_1, 15*°, I)
R_1 = Rotate(O_1, 15*°, I)
r_3 = Segment(Q_1, R_1)
S_1 = Rotate(Q_1, 15*°, I)
T_1 = Rotate(R_1, 15*°, I)
s_3 = Segment(S_1, T_1)
U_1 = Rotate(S_1, 15*°, I)
V_1 = Rotate(T_1, 15*°, I)
t_3 = Segment(U_1, V_1)
W_1 = Rotate(U_1, 15*°, I)
Z_1 = Rotate(V_1, 15*°, I)
a_4 = Segment(W_1, Z_1)
B_2 = Rotate(W_1, 15*°, I)
F_2 = Rotate(Z_1, 15*°, I)
b_4 = Segment(B_2, F_2)
G_2 = Rotate(B_2, 15*°, I)
H_2 = Rotate(F_2, 15*°, I)
c_4 = Segment(G_2, H_2)
I_2 = Rotate(G_2, 15*°, I)
J_2 = Rotate(H_2, 15*°, I)
d_4 = Segment(I_2, J_2)
K_2 = Rotate(I_2, 15*°, I)
L_2 = Rotate(J_2, 15*°, I)
e_4 = Segment(K_2, L_2)
M_2 = Rotate(K_2, 15*°, I)
N_2 = Rotate(L_2, 15*°, I)
f_4 = Segment(M_2, N_2)
O_2 = Rotate(M_2, 15*°, I)
Q_2 = Rotate(N_2, 15*°, I)
g_4 = Segment(O_2, Q_2)
R_2 = Rotate(O_2, 15*°, I)
S_2 = Rotate(Q_2, 15*°, I)
h_4 = Segment(R_2, S_2)
T_2 = Rotate(R_2, 15*°, I)
U_2 = Rotate(S_2, 15*°, I)
i_4 = Segment(T_2, U_2)
V_2 = Rotate(T_2, 15*°, I)
W_2 = Rotate(U_2, 15*°, I)
j_4 = Segment(V_2, W_2)
Z_2 = Rotate(V_2, 15*°, I)
A_3 = Rotate(W_2, 15*°, I)
k_4 = Segment(Z_2, A_3)
B_3 = Rotate(Z_2, 15*°, I)
C_3 = Rotate(A_3, 15*°, I)
l_4 = Segment(B_3, C_3)
v = false
n_4 = Segment(C, B)
q_4 = Segment(B, A)
r_4 = Segment(C, D)
w = false
m_4 = Segment(U, W)
s_4 = Segment(W, A)
t_4 = Segment(U, C)
a_5 = Segment(C, B)
z = false
b_5 = Segment(A, U)
u_1 = false
c_5 = Circle(P_6, a - Δω)
D_3 = Intersect(c_5, p_6)
d_5 = Segment(P_7, D_3)
e_5 = Segment(D_3, P_6)
f_5 = Circle(D_3, Δω)
E_3 = Intersect(f_5, e_5)
F_3 = Intersect(f_5, d_5)
BW = Distance(B, W)
g_5 = Circle(D_3, BW)
G_3 = Intersect(g_5, d_5)
h_5 = Segment(G_3, F_3)
i_5 = Segment(G_3, P_7)
k_5 = Circle(G_3, Δω)
H_3 = Intersect(k_5, i_5)
I_3 = Intersect(k_5, h_5)
h_P = 0.67 (slider from Δω to h_1 / 2, step 0.1)
j_5 = OrthogonalLine(H_3, p_6)
l_5 = OrthogonalLine(G_3, p_6)
m_5 = OrthogonalLine(I_3, p_6)
n_5 = OrthogonalLine(F_3, p_6)
q_5 = OrthogonalLine(D_3, p_6)
r_5 = OrthogonalLine(E_3, p_6)
s_5 = OrthogonalLine(A, r_5)
J_3 = Intersect(s_5, j_5)
K_3 = Intersect(s_5, l_5)
L_3 = Intersect(s_5, m_5)
M_3 = Intersect(s_5, n_5)
N_3 = Intersect(s_5, q_5)
O_3 = Intersect(s_5, r_5)
t_5 = Ray(H_3, J_3)
a_6 = Ray(G_3, K_3)
b_6 = Ray(I_3, L_3)
c_6 = Ray(F_3, M_3)
d_6 = Ray(D_3, B)
e_6 = Ray(E_3, O_3)
f_6 = Circle(H_3, h_P)
Q_3 = Intersect(f_6, t_5)
g_6 = OrthogonalLine(Q_3, t_5)
R_3 = Intersect(a_6, g_6)
S_3 = Intersect(g_6, b_6)
T_3 = Intersect(g_6, c_6)
V_3 = Intersect(g_6, e_6)
poly2, h_6, q_6, s_6, i_6 = Polygon(H_3, Q_3, S_3, I_3)
poly5, f_7, t_6, v_3, e_7 = Polygon(F_3, T_3, V_3, E_3)
j_6 = Segment(R_3, U)
l_6 = Line(W, T)
m_6 = Line(W, U)
n_6 = Line(C, D)
r_6 = Line(U, C)
a_7 = Line(T, R)
b_7 = Line(B, C)
W_3 = Intersect(l_6, m_6)
Z_3 = Intersect(b_7, l_6)
A_4 = Intersect(r_6, m_6)
B_4 = Intersect(r_6, b_7)
C_4 = Intersect(a_7, l_6)
D_4 = Intersect(a_7, f_3)
E_4 = Midpoint(L, P_7)
c_7 = OrthogonalLine(E_4, p_6)
F_4 = Intersect(c_7, n_6)
d_7 = Line(A, I)
G_4 = Intersect(d_7, l_2)
H_4 = Intersect(l_1, f_3)
g_7 = Line(S_2, M_1)
I_4 = Intersect(d_7, g_7)
J_4 = Intersect(d_7, g_7)
K_4 = Intersect(b_5, a_5)
k_6 = OrthogonalLine(D_3, p_6)
U_3 = Intersect(k_6, t_6)
h_7 = Segment(K_4, U_3)
A_5 = (-4.219074094104921, 8.137291508923743)
D_5 = (-0.9862614926388635, 8.137291508923743)
E_5 = (-0.989296646776235, 1.6816165663760008)
F_5 = (-4.222109248242294, 1.6816165663760008)
poly2_2, a_8, d_8, e_8, f_8 = Polygon(A_5, D_5, E_5, F_5)